﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Configuration;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
using System.Web.Security;

namespace Savico.Library.Commom.Module
{
    public class Spider
    {
        Config cfg = new Config();

        //Hàm lấy nội dung từ một trang web, giá trị trả về là một chuỗi đã được đọc
        public string GetWebContent(string strLink)
        {
            try
            {
                string strContent = "";

                //Tạo yêu cầu
                HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(strLink);

                //Đặt thời gian cho yêu cầu được xử lý
                objWebRequest.Timeout = 20000;
                objWebRequest.MaximumAutomaticRedirections = 4;
                objWebRequest.MaximumResponseHeadersLength = 4;
                if (!(cfg.ProxyServer.Length < 1) || !(cfg.ProxyPort.Length < 1))
                {
                    objWebRequest.Proxy = new System.Net.WebProxy(cfg.ProxyServer, int.Parse(cfg.ProxyPort));
                    objWebRequest.Proxy.Credentials = new NetworkCredential(cfg.ProxyUserName, cfg.ProxyPassword ,cfg.ProxyUserDomain);
                }
                objWebRequest.Credentials = CredentialCache.DefaultCredentials;

                //Lấy nội dung trang web về
                HttpWebResponse objWebResponse = (HttpWebResponse)objWebRequest.GetResponse();
                //Đọc nội dung trang web
                Stream receiceStream = objWebResponse.GetResponseStream();
                StreamReader readStream = new StreamReader(receiceStream, System.Text.Encoding.UTF8);
                strContent = readStream.ReadToEnd();

                objWebResponse.Close();
                readStream.Close();

                return Regex.Replace(strContent, "\\t|\\r|\\n", "");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }            
        }
        
        // Hàm lấy nội dung trang web, giá trị trả về là bộ đoc Stream
        public Stream GetStreamContentWeb(string strLink)
        {
            try
            {
                HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(strLink);
                objWebRequest.MaximumAutomaticRedirections = 4;
                objWebRequest.MaximumResponseHeadersLength = 4;
                if (!(cfg.ProxyServer.Length < 1) || !(cfg.ProxyPort.Length < 1))
                {
                    objWebRequest.Proxy = new System.Net.WebProxy(cfg.ProxyServer, int.Parse(cfg.ProxyPort));
                    objWebRequest.Proxy.Credentials = new NetworkCredential(cfg.ProxyUserName, cfg.ProxyPassword, cfg.ProxyUserDomain);
                }
                objWebRequest.Credentials = CredentialCache.DefaultCredentials;
                HttpWebResponse objWebResponse = (HttpWebResponse)objWebRequest.GetResponse();
                return objWebResponse.GetResponseStream();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}
